JDBC (Java Database Connectivity) ব্যবহার করে আপনি Stored Procedure কল করতে পারেন এবং তাদের রিটার্ন করা ডেটা, অর্থাৎ ResultSet পরিচালনা করতে পারেন। Stored Procedure হল ডেটাবেসে সংরক্ষিত SQL কোডের একটি সেট যা একাধিক SQL কুইরি এক্সিকিউট করতে ব্যবহৃত হয়। এটি ডেটাবেসের পারফরম্যান্স উন্নত করতে সহায়ক হতে পারে এবং কোড পুনঃব্যবহারযোগ্যতা বৃদ্ধি করতে সাহায্য করে।
এই গাইডে আমরা দেখব কীভাবে JDBC ব্যবহার করে Stored Procedure কল করা যায় এবং ResultSet কে সঠিকভাবে ম্যানেজ করা হয়।
1. Stored Procedure কল করা
Stored Procedure হল ডেটাবেসের মধ্যে সংরক্ষিত একটি প্রোগ্রাম যা একাধিক SQL কুয়েরি একত্রে প্রক্রিয়া করতে পারে। আপনি CallableStatement ব্যবহার করে JDBC-তে Stored Procedure কল করতে পারেন।
1.1 Stored Procedure কল করার উদাহরণ
ধরা যাক, আমাদের একটি Employee টেবিল রয়েছে এবং আমাদের ডেটাবেসে একটি Stored Procedure আছে যার নাম getEmployeeById, যা একটি নির্দিষ্ট id এর ভিত্তিতে Employee ডেটা রিটার্ন করে।
CREATE PROCEDURE getEmployeeById(IN emp_id INT)
BEGIN
SELECT * FROM employees WHERE id = emp_id;
END;
এই Stored Procedure কল করতে হবে JDBC ব্যবহার করে।
1.2 Stored Procedure কল করার উদাহরণ:
import java.sql.*;
public class StoredProcedureExample {
public static void main(String[] args) {
String jdbcURL = "jdbc:mysql://localhost:3306/mydatabase";
String username = "root";
String password = "password";
try (Connection connection = DriverManager.getConnection(jdbcURL, username, password)) {
// Stored Procedure কল করার জন্য CallableStatement ব্যবহার করা
String sql = "{call getEmployeeById(?)}";
CallableStatement callableStatement = connection.prepareCall(sql);
// ইনপুট প্যারামিটার সেট করা (Employee ID)
callableStatement.setInt(1, 101);
// ResultSet রিটার্ন করা এবং ডেটা প্রক্রিয়া করা
ResultSet resultSet = callableStatement.executeQuery();
while (resultSet.next()) {
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
double salary = resultSet.getDouble("salary");
System.out.println("ID: " + id + ", Name: " + name + ", Salary: " + salary);
}
resultSet.close();
callableStatement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
- CallableStatement:
CallableStatementব্যবহৃত হয়েছে স্টোরড প্রসিডিউর কল করার জন্য। - setInt(): প্রথম প্যারামিটার
emp_idহিসেবে স্টোরড প্রসিডিউরে মান প্রদান করা হয়েছে। - executeQuery(): executeQuery() মেথড ব্যবহার করে স্টোরড প্রসিডিউর চালানো হয়েছে এবং তার ফলস্বরূপ ResultSet রিটার্ন করা হয়েছে।
- ResultSet: ResultSet ব্যবহার করে ফেচ করা ডেটার উপর কাজ করা হয়েছে।
2. ResultSet Management
ResultSet হল সেই অবজেক্ট যা SQL কুয়েরি বা Stored Procedure থেকে প্রাপ্ত ফলাফল ধারণ করে। ResultSet ব্যবহার করার সময় কিছু গুরুত্বপূর্ণ বিষয় রয়েছে, যেমন ResultSet এর নেভিগেশন, ডেটার এক্সেস, এবং রিসোর্স ম্যানেজমেন্ট।
2.1 ResultSet Navigation
ResultSet এর মধ্যে নেভিগেট করতে আপনি next(), previous(), first(), এবং last() মেথড ব্যবহার করতে পারেন।
উদাহরণ:
// Navigating through ResultSet using next() method
while (resultSet.next()) {
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
System.out.println("ID: " + id + ", Name: " + name);
}
2.2 Retrieving Data from ResultSet
ResultSet থেকে ডেটা রিট্রাইভ করার জন্য getXXX() মেথড ব্যবহার করা হয়, যেমন getInt(), getString(), getDouble() ইত্যাদি।
উদাহরণ:
int id = resultSet.getInt("id"); // Integer value
String name = resultSet.getString("name"); // String value
double salary = resultSet.getDouble("salary"); // Double value
2.3 Handling NULL Values in ResultSet
ResultSet থেকে কোনো কলামের মান NULL হলে, সেক্ষেত্রে getXXX() মেথড null রিটার্ন করবে। যদি আপনি NULL মান চেক করতে চান, তবে wasNull() মেথড ব্যবহার করতে পারেন।
String name = resultSet.getString("name");
if (resultSet.wasNull()) {
System.out.println("Name is NULL");
} else {
System.out.println("Name: " + name);
}
2.4 Closing ResultSet and Other Resources
ResultSet এবং অন্যান্য JDBC রিসোর্স যেমন Statement এবং Connection সবসময় বন্ধ করা উচিত, যাতে মেমরি লিক না হয়।
resultSet.close();
callableStatement.close();
connection.close();
3. Handling Multiple ResultSets from Stored Procedure
একটি Stored Procedure একাধিক ResultSet ফেরত দিতে পারে। এই ক্ষেত্রে, getMoreResults() মেথড ব্যবহার করে পরবর্তী ResultSet অ্যাক্সেস করা যায়।
উদাহরণ: Multiple ResultSets from Stored Procedure
import java.sql.*;
public class MultipleResultSetExample {
public static void main(String[] args) {
String jdbcURL = "jdbc:mysql://localhost:3306/mydatabase";
String username = "root";
String password = "password";
try (Connection connection = DriverManager.getConnection(jdbcURL, username, password)) {
String sql = "{call getEmployeesAndDepartments()}";
CallableStatement callableStatement = connection.prepareCall(sql);
// Stored Procedure Call
boolean hasResults = callableStatement.execute();
// Process the first ResultSet (Employees)
if (hasResults) {
ResultSet resultSet1 = callableStatement.getResultSet();
while (resultSet1.next()) {
int id = resultSet1.getInt("id");
String name = resultSet1.getString("name");
System.out.println("Employee ID: " + id + ", Name: " + name);
}
}
// Check and process next ResultSet (Departments)
if (callableStatement.getMoreResults()) {
ResultSet resultSet2 = callableStatement.getResultSet();
while (resultSet2.next()) {
int id = resultSet2.getInt("id");
String department = resultSet2.getString("department_name");
System.out.println("Department ID: " + id + ", Department: " + department);
}
}
callableStatement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
- প্রথম ResultSet (
getEmployeesAndDepartments()) প্রক্রিয়া করা হয়েছে, তারপর getMoreResults() ব্যবহার করে পরবর্তী ResultSet (Departments) প্রক্রিয়া করা হয়েছে।
সারাংশ
JDBC Stored Procedure কল করা এবং ResultSet ম্যানেজমেন্ট হল ডেটাবেসের সাথে যোগাযোগ করার একটি গুরুত্বপূর্ণ দিক। CallableStatement ব্যবহার করে আপনি Stored Procedure কল করতে পারেন এবং ResultSet এর মাধ্যমে প্রাপ্ত ডেটার উপর কাজ করতে পারেন। ResultSet এর সঠিক নেভিগেশন, ডেটা এক্সেস, এবং রিসোর্স ম্যানেজমেন্ট পারফরম্যান্স উন্নত করতে সাহায্য করে। একাধিক ResultSet পরিচালনা করার জন্য getMoreResults() এবং getResultSet() মেথড ব্যবহার করা যেতে পারে। এই সমস্ত কৌশল ডেটাবেসের সাথে কার্যকরভাবে ইন্টারঅ্যাক্ট করতে সহায়ক।
Read more